// ======================================================================
// \title  LinuxTimer.hpp
// \author tim
// \brief  cpp file for LinuxTimer test harness implementation class
//
// \copyright
// Copyright 2009-2015, by the California Institute of Technology.
// ALL RIGHTS RESERVED.  United States Government Sponsorship
// acknowledged.
//
// ======================================================================

#include "LinuxTimerTester.hpp"

#define INSTANCE 0
#define MAX_HISTORY_SIZE 10

namespace Svc {

// ----------------------------------------------------------------------
// Construction and destruction
// ----------------------------------------------------------------------

LinuxTimerTester ::LinuxTimerTester()
    : LinuxTimerGTestBase("Tester", MAX_HISTORY_SIZE), component("LinuxTimer"), m_numCalls(0) {
    this->initComponents();
    this->connectPorts();
}

LinuxTimerTester ::~LinuxTimerTester() {}

// ----------------------------------------------------------------------
// Tests
// ----------------------------------------------------------------------

void LinuxTimerTester ::runCycles() {
    this->m_numCalls = 5;
    this->component.startTimer(Fw::TimeInterval(1, 0));
}

// ----------------------------------------------------------------------
// Handlers for typed from ports
// ----------------------------------------------------------------------

void LinuxTimerTester ::from_CycleOut_handler(const FwIndexType portNum, Os::RawTime& cycleStart) {
    printf("TICK\n");

    if (--this->m_numCalls == 0) {
        this->component.quit();
    }
}

// ----------------------------------------------------------------------
// Helper methods
// ----------------------------------------------------------------------

void LinuxTimerTester ::connectPorts() {
    // CycleOut
    this->component.set_CycleOut_OutputPort(0, this->get_from_CycleOut(0));
}

void LinuxTimerTester ::initComponents() {
    this->init();
    this->component.init(INSTANCE);
}

}  // end namespace Svc
